package cn.com.spic.demo.controller;

import cn.com.spic.demo.api.*;
import cn.com.spic.demo.dto.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.cpipec.demo.spi.EOSServerRestClient;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STShd;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.math.BigInteger;
import java.net.URLEncoder;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * 智能报告--公司对标提升工作月度报告
 */
@RestController
@RequestMapping("/smartReportCompany")
public class SmartReportCompanyController {
    @Autowired
    private ActionProjectService actionProjectService;
    @Autowired
    private ProgressReportService progressReportService;
    @Autowired
    private EmployeeService employeeService;
    @Autowired
    private EOSServerRestClient eosServerRestClient;
    @Value("${file.address}")
    private String fileAddress;
    @Autowired
    private SpecialProjectService specialProjectService;
    @Autowired
    private ReportService reportService;
    @Autowired
    private OrganizationService organizationService;
    /**
     * 月度报告保存
     * @param request
     */
    @GetMapping("/saveReport")
    public String saveReport(HttpServletRequest request) throws ParseException {
       try{
           Calendar cal = Calendar.getInstance();
           String spicFirstDeptId = request.getParameter("spicFirstDeptId");
           String yyfx = request.getParameter("yyfx");
           String zfAndj = request.getParameter("zfAndjy");
           String jybgjcs = request.getParameter("jybgjcs");
           String status = request.getParameter("status");
           ReportDTO reportDTO=new ReportDTO();
           Map<String,String> map=new HashMap<>();
           EmployeeDTO employee = employeeService.getEmployeeById(getUserCode());
           String submitMonth = null;
           String submitYear = String.valueOf(cal.get(Calendar.YEAR));
           int month = cal.get(Calendar.MONTH);
           if(month<=9){
               submitMonth = "0"+month;
           }else{
               submitMonth = String.valueOf(month);
           }
           if(month==0){
               submitYear = String.valueOf(Integer.parseInt(submitYear)-1);
               submitMonth="12";
           }
           reportDTO.setType("1");
           reportDTO.setYyfx(yyfx);
           reportDTO.setZfAndjy(zfAndj);
           reportDTO.setJybgjcs(jybgjcs);
           reportDTO.setDeptid(spicFirstDeptId==null?employee.getOrgCode():spicFirstDeptId);
           reportDTO.setCreateor(employee.getCode());
           reportDTO.setSubmitYear(submitYear);
           reportDTO.setSubmitMonth(submitMonth);
           reportDTO.setStatus(status);
           map.put("submitYear",submitYear);
           map.put("submitMonth",submitMonth);
           map.put("deptid",spicFirstDeptId);
           map.put("type","1");
           ReportDTO reportDTO1=reportService.getReportByCondition(map);
           if(reportDTO1.getId()==null){
               reportService.insertReport(reportDTO);
           }else{
               reportService.updateReport(reportDTO);
           }

           return "保存成功";
       }catch (Exception e){
           e.printStackTrace();
       }
        return "保存失败，请重新保存！";
    }
    private String getUserCode(){
        JSON json = eosServerRestClient.getCurrentUser();
        JSONObject object = JSONObject.parseObject(json.toJSONString());
        return object.getString("username");
    }
    /**
     * 月度报告保存
     * @param request
     */
    @GetMapping("/exportWord")
    public String exportWord(HttpServletRequest request) throws ParseException {
        String base1=request.getParameter("base1");
        String base2=request.getParameter("base2");
        String base3=request.getParameter("base3");
        return "保存失败，请重新保存！";
    }



    /**
     * 计算时间差
     */
    private Long getDayNum(String day1,String day2) throws Exception {
        Date    a11 = new SimpleDateFormat("yyyy-MM-dd").parse(day1);
        Date    b11 = new SimpleDateFormat("yyyy-MM-dd").parse(day2);
        long dayNum = (a11.getTime()-b11.getTime())/(24*60*60*1000);
        return dayNum;
    }



    private static List<String> getMonthBetween(String minDate, String maxDate) throws Exception {
        ArrayList<String> result = new ArrayList<String>();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");//格式化为年月

        Calendar min = Calendar.getInstance();
        Calendar max = Calendar.getInstance();

        min.setTime(sdf.parse(minDate));
        min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);

        max.setTime(sdf.parse(maxDate));
        max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);

        Calendar curr = min;
        while (curr.before(max)) {
            result.add(sdf.format(curr.getTime()));
            curr.add(Calendar.MONTH, 1);
        }

        return result;
    }
    private static String subMonth(String date) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        Date dt = sdf.parse(date);

        Calendar rightNow = Calendar.getInstance();

        rightNow.setTime(dt);

        rightNow.add(Calendar.MONTH, -1);
        Date dt1 = rightNow.getTime();

        String reStr = sdf.format(dt1);

        return reStr;
    }
    /**
     * XX公司对标提升工作月度报告---累计完成进度
     * @param httpServletRequest
     * @return
     */
    @GetMapping(value = "/groupReportMonth_ljwcjd" )
    public List<ProgressReportDTO> groupReportMonth_ljwcjd(HttpServletRequest httpServletRequest) throws ParseException {
        Calendar cal = Calendar.getInstance();
        String spicFirstDeptId = httpServletRequest.getParameter("spicFirstDeptId");
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        String submitMonth = null;
        String submitYear = String.valueOf(cal.get(Calendar.YEAR));
        EmployeeDTO employee = employeeService.getEmployeeById(getUserCode());
        Map<String,String> map = new HashMap<>();
        int month = cal.get(Calendar.MONTH);
        if(month<=9){
            submitMonth = "0"+month;
        }else{
            submitMonth = String.valueOf(month);
        }
        if(month==0){
            submitYear = String.valueOf(Integer.parseInt(submitYear)-1);
            submitMonth="12";
        }
        map.put("submitYear",submitYear);
        map.put("spicFirstDeptId",spicFirstDeptId==null?employee.getOrgCode():spicFirstDeptId);
        map.put("submitMonth",submitMonth);
        map.put("endtime",subMonth(new SimpleDateFormat("yyyy-MM-dd").format(new Date())));
        List<SpecialProjectDTO> specialProjectDTOS = specialProjectService.getAllSpecialProList();
        List<ProgressReportDTO> nineList=new ArrayList<ProgressReportDTO>();
        List<EchartDTO> echartDTOS = progressReportService.groupReportMonth_ljwcjd(map);
        for(SpecialProjectDTO dto:specialProjectDTOS){
            ProgressReportDTO progressReportDTO=new ProgressReportDTO();
            for(EchartDTO echartDTO:echartDTOS){
                if(echartDTO.getJdxid().equals(dto.getId())){
                    progressReportDTO.setSjwc(echartDTO.getSjwc());
                    progressReportDTO.setJhwc(echartDTO.getJhwc());
                    progressReportDTO.setJhwcl((Double.parseDouble(echartDTO.getSjwc()))/(Double.parseDouble(echartDTO.getJhwc()))+"");
                }
            }
            progressReportDTO.setNineProjectName(dto.getSpecialProjectName());
            nineList.add(progressReportDTO);
        }
        return nineList;
    }
    /**
     * XX公司对标提升工作月度报告---当月完成进度
     * @param httpServletRequest
     * @return
     */
    @GetMapping(value = "/groupReportMonth_dywcjd" )
    public List<ProgressReportDTO> groupReportMonth_dywcjd(HttpServletRequest httpServletRequest) throws ParseException {
        Calendar cal = Calendar.getInstance();
        String spicFirstDeptId = httpServletRequest.getParameter("spicFirstDeptId");
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        String submitMonth = null;
        String preSubmitMonth = null;
        String submitYear = String.valueOf(cal.get(Calendar.YEAR));
        String preSubmitYear = String.valueOf(cal.get(Calendar.YEAR));
        EmployeeDTO employee = employeeService.getEmployeeById(getUserCode());
        Map<String,String> map = new HashMap<>();
        Map<String,String> preMap = new HashMap<>();//查询上个月的填报数据
        int month = cal.get(Calendar.MONTH);
        if(month<=9){
            submitMonth = "0"+month;
            preSubmitMonth = "0"+(month-1);
        }else{
            submitMonth = String.valueOf(month);
            preSubmitMonth = String.valueOf(month-1);
        }
        if(month==0){
            submitYear = String.valueOf(Integer.parseInt(submitYear)-1);
            submitMonth="12";
            preSubmitYear = String.valueOf(Integer.parseInt(submitYear)-1);
            preSubmitMonth="11";
        }
        if(month==1){
            preSubmitYear = String.valueOf(Integer.parseInt(submitYear)-1);
            preSubmitMonth="12";
        }
        map.put("submitYear",submitYear);
        map.put("submitMonth",submitMonth);
        map.put("spicFirstDeptId",spicFirstDeptId==null?employee.getOrgCode():spicFirstDeptId);
        map.put("endtime",subMonth(new SimpleDateFormat("yyyy-MM-dd").format(new Date())));
        preMap.put("endtime",subMonth(subMonth(new SimpleDateFormat("yyyy-MM-dd").format(new Date()))));
        preMap.put("submitYear",preSubmitYear);
        preMap.put("submitMonth",preSubmitMonth);
        preMap.put("spicFirstDeptId",spicFirstDeptId==null?employee.getOrgCode():spicFirstDeptId);
        List<SpecialProjectDTO> specialProjectDTOS = specialProjectService.getAllSpecialProList();
        List<ProgressReportDTO> nineList=new ArrayList<ProgressReportDTO>();
        List<EchartDTO> echartDTOS = progressReportService.groupReportMonth_ljwcjd(map);//当前月填报数据
        List<EchartDTO> preechartDTOS = progressReportService.groupReportMonth_ljwcjd(preMap);//当前月上一个月填报数据
        for(SpecialProjectDTO dto:specialProjectDTOS){
            ProgressReportDTO progressReportDTO=new ProgressReportDTO();
            for(EchartDTO echartDTO:echartDTOS){
                if(echartDTO.getJdxid().equals(dto.getId())){
                   if(preechartDTOS.size()<=0){
                       progressReportDTO.setSjwc(echartDTO.getSjwc());
                       progressReportDTO.setJhwc(echartDTO.getJhwc());
                       progressReportDTO.setJhwcl((Double.parseDouble(echartDTO.getSjwc()))/(Double.parseDouble(echartDTO.getJhwc()))+"");
                       progressReportDTO.setNineProjectName(echartDTO.getJdx());
                       continue;
                   }else{
                       for(EchartDTO preehartdto:preechartDTOS){
                           if(preehartdto.getActionid().equals(echartDTO.getActionid())){
                               Double sjwc=(Double.parseDouble(echartDTO.getSjwc()))-(Double.parseDouble(preehartdto.getSjwc()));//填报月上一个月的实际完成进度减去填报月的实际完成进度
                               Double jhwc=0.0;
                               String starttime=echartDTO.getStarttime();
                               String endtime=echartDTO.getEndtime();
                               if((Double.parseDouble(preehartdto.getSjwc()))<(Double.parseDouble(preehartdto.getJhwc()))){//填报上一个月的实际完成进度小于计划完成进度
                                   jhwc=1.0/((getMonthDiff(sdf.parse(endtime),sdf.parse(starttime))+1)+((Double.parseDouble(preehartdto.getJhwc()))-Double.parseDouble(echartDTO.getJhwc())));
                               }else{
                                   jhwc=1.0/((getMonthDiff(sdf.parse(endtime),sdf.parse(starttime))+1));
                               }
                               progressReportDTO.setSjwc(sjwc+"");
                               progressReportDTO.setJhwc(jhwc+"");
                               progressReportDTO.setJhwcl(sjwc/jhwc+"");

                               continue;
                           }

                       }
                   }

                }

            }
            progressReportDTO.setNineProjectName(dto.getSpecialProjectName());
            nineList.add(progressReportDTO);
        }
//        for(ProgressReportDTO dto:nineList){
//            System.out.println(dto.getNineProjectName()+"==="+dto.getSjwc()+"===="+dto.getJhwc()+"===="+dto.getJhwcl());
//        }
        return nineList;
    }
    /**
     * XX专项对标提升工作月度报告--累计进度报告
     * @param httpServletRequest
     * @return
     */
    @GetMapping(value = "/getActionByZx_ljjd" )
    public List<EchartDTO> getActionByZx_ljjd(HttpServletRequest httpServletRequest) throws ParseException {
        Calendar cal = Calendar.getInstance();
        String jdxid = httpServletRequest.getParameter("jdxid");
        jdxid="1";
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        String submitMonth = null;
        String submitYear = String.valueOf(cal.get(Calendar.YEAR));
        EmployeeDTO employee = employeeService.getEmployeeById(getUserCode());
        Map<String,String> map = new HashMap<>();
        int month = cal.get(Calendar.MONTH);
        if(month<=9){
            submitMonth = "0"+month;
        }else{
            submitMonth = String.valueOf(month);
        }
        if(month==0){
            submitYear = String.valueOf(Integer.parseInt(submitYear)-1);
            submitMonth="12";
        }
        map.put("submitYear",submitYear);
        map.put("submitMonth",submitMonth);
        map.put("endtime",subMonth(new SimpleDateFormat("yyyy-MM-dd").format(new Date())));
        map.put("jdxid","1");
        List<EchartDTO> echartDTOS = progressReportService.getActionByZx(map);//某个对标领域的120专项
        List<ActionProejctDTO> actionProejctDTOS=actionProjectService.getAllAction();//全部的行动项
        List<EchartDTO> list=new ArrayList<>();
        for(ActionProejctDTO actionProejctDTO:actionProejctDTOS){
            if(actionProejctDTO.getLevel().equals("1")&&actionProejctDTO.getSpecialId().equals(jdxid)){
                EchartDTO echartDTO=new EchartDTO();
                Double sjwc=0.0;
                Double jhwc=0.0;
                int count=0;
                for(EchartDTO echartDTO1:echartDTOS){
                    if(echartDTO1.getLevel().equals("3")){//如果等于3代表是二级单位
                        for(ActionProejctDTO actionProejctDTO1:actionProejctDTOS){
                            String parentid[]=echartDTO1.getActionid().split(",");
                            for(String str:parentid){
                                if(str.equals(actionProejctDTO1.getId())){
                                    String parentProjectId=actionProejctDTO1.getParentProjectId();
                                    if(parentProjectId.equals(actionProejctDTO.getId())){
                                        sjwc+=Double.parseDouble(echartDTO1.getSjwc());
                                        jhwc+=Double.parseDouble(echartDTO1.getJhwc());
                                        count++;
                                    }
                                }
                            }
                        }
                    }else if(echartDTO1.getLevel().equals("2")){
                        String parentid[]=echartDTO1.getActionid().split(",");
                        for(String str:parentid){
                            if(str.equals(actionProejctDTO.getId())){
                                sjwc+=Double.parseDouble(echartDTO1.getSjwc());
                                jhwc+=Double.parseDouble(echartDTO1.getJhwc());
                                count++;
                            }
                        }
                    }

                }
                echartDTO.setJdx(actionProejctDTO.getActionProName());
                echartDTO.setSjwc(sjwc/count+"");
                echartDTO.setJhwc(jhwc/count+"");
                list.add(echartDTO);
            }
        }
//        for(EchartDTO echartDTO:list){
//            System.out.println(echartDTO.getJdx()+"===="+echartDTO.getSjwc()+"====="+echartDTO.getJhwc());
//        }
        return list;
    }
    /**
     * XX专项对标提升工作月度报告--月度进度报告
     * @param httpServletRequest
     * @return
     */
    @GetMapping(value = "/getActionByZx_ydjd" )
    public List<EchartDTO> getActionByZx_ydjd(HttpServletRequest httpServletRequest) throws ParseException {
        Calendar cal = Calendar.getInstance();
        String jdxid = httpServletRequest.getParameter("jdxid");
        jdxid="1";
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        String submitMonth = null;
        String preSubmitMonth = null;
        String submitYear = String.valueOf(cal.get(Calendar.YEAR));
        String preSubmitYear = String.valueOf(cal.get(Calendar.YEAR));
        EmployeeDTO employee = employeeService.getEmployeeById(getUserCode());
        Map<String,String> map = new HashMap<>();
        Map<String,String> preMap = new HashMap<>();
        int month = cal.get(Calendar.MONTH);
        if(month<=9){
            submitMonth = "0"+month;
            preSubmitMonth = "0"+(month-1);
        }else{
            submitMonth = String.valueOf(month);
            preSubmitMonth = String.valueOf(month-1);
        }
        if(month==0){
            submitYear = String.valueOf(Integer.parseInt(submitYear)-1);
            submitMonth="12";
            preSubmitYear = String.valueOf(Integer.parseInt(submitYear)-1);
            preSubmitMonth="11";
        }
        if(month==1){
            preSubmitYear = String.valueOf(Integer.parseInt(submitYear)-1);
            preSubmitMonth="12";
        }
        map.put("submitYear",submitYear);
        map.put("submitMonth",submitMonth);
        map.put("jdxid","1");
        map.put("endtime",subMonth(new SimpleDateFormat("yyyy-MM-dd").format(new Date())));
        preMap.put("submitYear",preSubmitYear);
        preMap.put("submitMonth",preSubmitMonth);
        preMap.put("jdxid","1");
        preMap.put("endtime",subMonth(subMonth(new SimpleDateFormat("yyyy-MM-dd").format(new Date()))));
        List<EchartDTO> echartDTOS = progressReportService.getActionByZx(map);//某个对标领域的120专项
        List<EchartDTO> preEchartDTOS = progressReportService.getActionByZx(preMap);//填报月上一个月某个对标领域的120专项
        List<ActionProejctDTO> actionProejctDTOS=actionProjectService.getAllAction();//全部的行动项
        List<EchartDTO> list=new ArrayList<>();
        for(ActionProejctDTO actionProejctDTO:actionProejctDTOS){
            if(actionProejctDTO.getLevel().equals("1")&&actionProejctDTO.getSpecialId().equals(jdxid)){
                EchartDTO echartDTO=new EchartDTO();
                Double sjwc=0.0;
                Double jhwc=0.0;
                int count=0;
                for(EchartDTO echartDTO1:echartDTOS){
                    if(echartDTO1.getLevel().equals("3")){//如果等于3代表是二级单位
                        for(ActionProejctDTO actionProejctDTO1:actionProejctDTOS){
                            String parentid[]=echartDTO1.getActionid().split(",");
                            for(String str:parentid){
                                if(str.equals(actionProejctDTO1.getId())){
                                    String parentProjectId=actionProejctDTO1.getParentProjectId();
                                    if(parentProjectId.equals(actionProejctDTO.getId())){
                                        for(EchartDTO echartDTO2:preEchartDTOS){
                                            if(echartDTO2.getActionid().equals(echartDTO1.getActionid())){
                                                sjwc+=(Double.parseDouble(echartDTO1.getSjwc())-Double.parseDouble(echartDTO2.getSjwc()));
                                                jhwc+=(Double.parseDouble(echartDTO1.getJhwc())-Double.parseDouble(echartDTO2.getJhwc()));
                                                count++;
                                            }
                                        }

                                    }
                                }
                            }
                        }
                    }else if(echartDTO1.getLevel().equals("2")){
                        String parentid[]=echartDTO1.getActionid().split(",");
                        for(String str:parentid){
                            if(str.equals(actionProejctDTO.getId())){
                                sjwc+=Double.parseDouble(echartDTO1.getSjwc());
                                jhwc+=Double.parseDouble(echartDTO1.getJhwc());
                                count++;
                            }
                        }
                    }

                }
                DecimalFormat df = new DecimalFormat("0.00");
                echartDTO.setJdx(actionProejctDTO.getActionProName());
                echartDTO.setSjwc(df.format(sjwc/count)+"");
                echartDTO.setJhwc(df.format(jhwc/count)+"");
                list.add(echartDTO);
            }
        }
//        for(EchartDTO echartDTO:list){
//            System.out.println(echartDTO.getJdx()+"===="+echartDTO.getSjwc()+"====="+echartDTO.getJhwc());
//        }
        return list;
    }
    /**
     * XX公司对标提升工作月度报告---工作进度
     * @param httpServletRequest
     * @return
     */
    @GetMapping(value = "/groupReportMonth_gzjd" )
    public JSONObject groupReportMonth_gzjd(HttpServletRequest httpServletRequest) throws ParseException {
        Calendar cal = Calendar.getInstance();
        String spicFirstDeptId = httpServletRequest.getParameter("spicFirstDeptId");
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        String submitMonth = null;
        String submitYear = String.valueOf(cal.get(Calendar.YEAR));
        EmployeeDTO employee = employeeService.getEmployeeById(getUserCode());
        Map<String,String> map = new HashMap<>();
        Map<String,String> allmap = new HashMap<>();
        Map<String,String> preMap = new HashMap<>();
        int month = cal.get(Calendar.MONTH);
        if(month<=9){
            submitMonth = "0"+month;
        }else{
            submitMonth = String.valueOf(month);
        }
        if(month==0){
            submitYear = String.valueOf(Integer.parseInt(submitYear)-1);
            submitMonth="12";
        }
        map.put("submitYear",submitYear);
        map.put("spicFirstDeptId",spicFirstDeptId==null?employee.getOrgCode():spicFirstDeptId);
        map.put("submitMonth",submitMonth);
        map.put("deptOrOrg","org%");//二级单位还是牵头部门

        allmap.put("submitYear",submitYear);
        allmap.put("submitMonth",submitMonth);
        allmap.put("deptOrOrg","org%");//二级单位还是牵头部门
        preMap.put("submitYear",submitYear);
        preMap.put("submitMonth",submitMonth);
        preMap.put("spicFirstDeptId",spicFirstDeptId==null?employee.getOrgCode():spicFirstDeptId);
        preMap.put("sjwc","1");
        map.put("endtime",subMonth(new SimpleDateFormat("yyyy-MM-dd").format(new Date())));
        preMap.put("endtime",subMonth(new SimpleDateFormat("yyyy-MM-dd").format(new Date())));
        allmap.put("endtime",subMonth(new SimpleDateFormat("yyyy-MM-dd").format(new Date())));
        List<SpecialProjectDTO> specialProjectDTOS = specialProjectService.getAllSpecialProList();
        List<EchartDTO> echartDTOS = progressReportService.getjhwclBypingjunf(map);
        List<EchartDTO> allechartDTOS = progressReportService.getjhwclBypingjunf(allmap);
        List<EchartDTO> alljdx = progressReportService.yuqiJdx(map);//全部项目数据
        List<EchartDTO> yxEchartDTOS = progressReportService.yuqiJdx(preMap);//逾期进度项
        List<EchartDTO> newEchartDto=new ArrayList<>();
        JSONObject jsonObject=new JSONObject();
//        （0.9*计划完成率+0.1*(X- Xmin)/(Xmax-Xmin)）,Xmax=103，Xmin=10,这个行动项最大值和最小值是固定的
        double zongf=0.0;
        double jhwcl=Double.parseDouble(echartDTOS.get(0).getJhwc());
        int xdxCount=Integer.parseInt(echartDTOS.get(0).getXdxCount());
        zongf=0.9*jhwcl+0.1*(xdxCount-10)/(103-10);
        for(int i=0;i<allechartDTOS.size();i++){
            EchartDTO echartDTO=new EchartDTO();
            double allzongf=0.0;
            double alljhwcl=Double.parseDouble(allechartDTOS.get(i).getJhwc());
            int allxdxCount=Integer.parseInt(allechartDTOS.get(i).getXdxCount());
            allzongf=0.9*alljhwcl+0.1*(allxdxCount-10)/(103-10);
            echartDTO.setZongf(allzongf);
            echartDTO.setCompname(allechartDTOS.get(i).getCompname());
            echartDTO.setNumber(allechartDTOS.get(i).getNumber());
            newEchartDto.add(echartDTO);
        }
        String dbly="";
        String yxdbly="";
        Integer zxCount=0;
        for(SpecialProjectDTO specialProjectDTO:specialProjectDTOS){
            for(EchartDTO echartDTO:alljdx){
                if(echartDTO.getJdx().equals(specialProjectDTO.getSpecialProjectName())){
                    dbly+=echartDTO.getJdx()+",";
                    zxCount++;
                    break;
                }
            }
        }
        for(SpecialProjectDTO specialProjectDTO:specialProjectDTOS){
            for(EchartDTO echartDTO:yxEchartDTOS){
                if(echartDTO.getJdx().equals(specialProjectDTO.getSpecialProjectName())){
                    yxdbly+=echartDTO.getJdx()+",";
                    break;
                }
            }
        }

        Collections.sort(newEchartDto, new Comparator<EchartDTO>()
        {
            public int compare(EchartDTO student1, EchartDTO student2)
            {
                    return student2.getZongf().compareTo(student1.getZongf());
            }
        });
        if(newEchartDto.size()==1&&newEchartDto.get(0).getNumber().equals(spicFirstDeptId)){
            jsonObject.put("compname",echartDTOS.get(0).getCompname());
            DecimalFormat df = new DecimalFormat("0.00");
            jsonObject.put("zongf",df.format(zongf));
            jsonObject.put("paiming",(1));
            jsonObject.put("month",submitMonth);
            jsonObject.put("dbly",dbly);
            jsonObject.put("yxdbly",yxdbly);
            jsonObject.put("dblyCount",alljdx.size());
            jsonObject.put("zxCount",zxCount);
            jsonObject.put("yxdblyCount",yxEchartDTOS.size());//逾期对标领域
            jsonObject.put("zcdblyCount",alljdx.size()-yxEchartDTOS.size());//正常对标领域
        }
        for(int i=0;i<newEchartDto.size();i++){
            if(zongf>newEchartDto.get(i).getZongf()){
                jsonObject.put("compname",echartDTOS.get(0).getCompname());
                DecimalFormat df = new DecimalFormat("0.00");
                jsonObject.put("zongf",df.format(zongf));
                jsonObject.put("paiming",(i+1));
                jsonObject.put("month",submitMonth);
                jsonObject.put("dbly",dbly);
                jsonObject.put("yxdbly",yxdbly);
                jsonObject.put("dblyCount",alljdx.size());
                jsonObject.put("zxCount",zxCount);
                jsonObject.put("yxdblyCount",yxEchartDTOS.size());//逾期对标领域
                jsonObject.put("zcdblyCount",alljdx.size()-yxEchartDTOS.size());//正常对标领域
                break;
            }else if(i==newEchartDto.size()-1){
                jsonObject.put("compname",echartDTOS.get(0).getCompname());
                DecimalFormat df = new DecimalFormat("0.00");
                jsonObject.put("zongf",df.format(zongf));
                jsonObject.put("paiming",(i+1));
                jsonObject.put("month",submitMonth);
                jsonObject.put("dbly",dbly);
                jsonObject.put("yxdbly",yxdbly);
                jsonObject.put("dblyCount",alljdx.size());
                jsonObject.put("zxCount",zxCount);
                jsonObject.put("yxdblyCount",yxEchartDTOS.size());//逾期对标领域
                jsonObject.put("zcdblyCount",alljdx.size()-yxEchartDTOS.size());//正常对标领域
                break;
            }
        }
        return jsonObject;
    }
    /**
     * XX公司对标提升工作月度报告---逾期项目
     * @param httpServletRequest
     * @return
     */
    @GetMapping(value = "/groupReportMonth_yuqiJdx" )
    public List<EchartDTO> groupReportMonth_yuqiJdx(HttpServletRequest httpServletRequest) throws ParseException {
        Calendar cal = Calendar.getInstance();
        String spicFirstDeptId = httpServletRequest.getParameter("spicFirstDeptId");
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        String submitMonth = null;
        String submitYear = String.valueOf(cal.get(Calendar.YEAR));
        EmployeeDTO employee = employeeService.getEmployeeById(getUserCode());
        Map<String,String> map = new HashMap<>();
        Map<String,String> preMap = new HashMap<>();//查询上个月的填报数据
        int month = cal.get(Calendar.MONTH);
        if(month<=9){
            submitMonth = "0"+month;
        }else{
            submitMonth = String.valueOf(month);
        }
        if(month==0){
            submitYear = String.valueOf(Integer.parseInt(submitYear)-1);
            submitMonth="12";
        }
        map.put("submitYear",submitYear);
        map.put("submitMonth",submitMonth);
        map.put("spicFirstDeptId",spicFirstDeptId==null?employee.getOrgCode():spicFirstDeptId);
        preMap.put("submitYear",submitYear);
        preMap.put("submitMonth",submitMonth);
        preMap.put("spicFirstDeptId",spicFirstDeptId==null?employee.getOrgCode():spicFirstDeptId);
        preMap.put("sjwc","1");
        preMap.put("endtime",subMonth(new SimpleDateFormat("yyyy-MM-dd").format(new Date())));
        map.put("endtime",subMonth(new SimpleDateFormat("yyyy-MM-dd").format(new Date())));
        List<SpecialProjectDTO> specialProjectDTOS = specialProjectService.getAllSpecialProList();
        List<EchartDTO> nineList=new ArrayList<EchartDTO>();
        List<EchartDTO> echartDTOS = progressReportService.yuqiJdx(map);//全部项目数据
        List<EchartDTO> yxEchartDTOS = progressReportService.yuqiJdx(preMap);//逾期进度项
        for(SpecialProjectDTO dto:specialProjectDTOS){
            int actionCount=0;
            int yuqiCount=0;
            EchartDTO progressReportDTO=new EchartDTO();
            for(EchartDTO echartDTO:echartDTOS){
                if(echartDTO.getJdxid().equals(dto.getId())){
                    actionCount++;
                }
            }
            for(EchartDTO echartDTO1:yxEchartDTOS){
                if(echartDTO1.getJdxid().equals(dto.getId())){
                    yuqiCount++;
                }
            }
            progressReportDTO.setActionCount(actionCount);
            progressReportDTO.setYuqiCount(yuqiCount);
            progressReportDTO.setNormalCount(actionCount-yuqiCount);
            progressReportDTO.setJdx(dto.getSpecialProjectName());
            nineList.add(progressReportDTO);
        }
//        for(EchartDTO dto:nineList){
//            System.out.println(dto.getJdx()+"==="+dto.getActionCount()+"===="+dto.getYuqiCount()+"===="+dto.getNormalCount());
//        }
        return nineList;
    }
    /**
     * XX公司对标提升工作月度报告---逾期项目---详细信息
     * @param httpServletRequest
     * @return
     */
    @GetMapping(value = "/yuqiJdx_xiangxi" )
    public List<EchartDTO> yuqiJdx_xiangxi(HttpServletRequest httpServletRequest) throws ParseException {
        Calendar cal = Calendar.getInstance();
        String spicFirstDeptId = httpServletRequest.getParameter("spicFirstDeptId");
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        String submitMonth = null;
        String submitYear = String.valueOf(cal.get(Calendar.YEAR));
        EmployeeDTO employee = employeeService.getEmployeeById(getUserCode());
        Map<String,String> map = new HashMap<>();
        int month = cal.get(Calendar.MONTH);
        if(month<=9){
            submitMonth = "0"+month;
        }else{
            submitMonth = String.valueOf(month);
        }
        if(month==0){
            submitYear = String.valueOf(Integer.parseInt(submitYear)-1);
            submitMonth="12";
        }
        map.put("submitYear",submitYear);
        map.put("submitMonth",submitMonth);
        map.put("spicFirstDeptId",spicFirstDeptId==null?employee.getOrgCode():spicFirstDeptId);
        map.put("endtime",subMonth(new SimpleDateFormat("yyyy-MM-dd").format(new Date())));
        List<EchartDTO> echartDTOS = progressReportService.yuqiJdx_xiangxi(map);//全部项目数据
        DecimalFormat df=new DecimalFormat("0.00");
        for(EchartDTO dto:echartDTOS){
            dto.setSjwc(df.format(Double.parseDouble(dto.getSjwc())*100)+"%");
            dto.setJhwc(df.format(Double.parseDouble(dto.getJhwc())*100)+"%");
        }
        return echartDTOS;
    }
    /**
     * XX公司对标提升工作月度报告---逾期项目---详细信息
     * @param httpServletRequest
     * @return
     */
    @GetMapping(value = "/yuqiJdx_xiangxi_zhuanx" )
    public List<EchartDTO> yuqiJdx_xiangxi_zhuanx(HttpServletRequest httpServletRequest) throws ParseException {
        Calendar cal = Calendar.getInstance();
        String jdxid = httpServletRequest.getParameter("spicFirstDeptId");
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        String submitMonth = null;
        String preSubmitMonth = null;
        String submitYear = String.valueOf(cal.get(Calendar.YEAR));
        String preSubmitYear = String.valueOf(cal.get(Calendar.YEAR));
        EmployeeDTO employee = employeeService.getEmployeeById(getUserCode());
        Map<String,String> map = new HashMap<>();
        int month = cal.get(Calendar.MONTH);
        if(month<=9){
            submitMonth = "0"+month;
        }else{
            submitMonth = String.valueOf(month);
        }
        if(month==0){
            submitYear = String.valueOf(Integer.parseInt(submitYear)-1);
            submitMonth="12";
        }
        map.put("submitYear",submitYear);
        map.put("submitMonth",submitMonth);
        map.put("jdxid",jdxid==null?"1":jdxid);
        map.put("endtime",subMonth(new SimpleDateFormat("yyyy-MM-dd").format(new Date())));
        List<EchartDTO> echartDTOS = progressReportService.yuqiJdx_xiangxi(map);//全部项目数据
//        for(EchartDTO dto:echartDTOS){
//            System.out.println(dto.getDbly()+"==="+dto.getBdwbdqdxh()+"==="+dto.getJtzxdbqdh()+"===="+dto.getJtdbqdxh()+"==="+dto.getXdx()+"==="+dto.getEndtime()+"==="+(Double.parseDouble(dto.getJhwc())*100)+"%"+"==="+(Double.parseDouble(dto.getSjwc())*100)+"%"+"==="+dto.getJzqk()+"===="+dto.getQtdw()+"==="+dto.getPhdw());
//        }
        return echartDTOS;
    }
    /**
     * XX公司对标提升工作月度报告---原因分析，可编辑的信息
     * @param httpServletRequest
     * @return
     */
    @GetMapping(value = "/getReport" )
    public ReportDTO getReport(HttpServletRequest httpServletRequest) throws ParseException {
        Calendar cal = Calendar.getInstance();
        String spicFirstDeptId = httpServletRequest.getParameter("spicFirstDeptId");
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        String submitMonth = null;
        String submitYear = String.valueOf(cal.get(Calendar.YEAR));
        EmployeeDTO employee = employeeService.getEmployeeById(getUserCode());
        Map<String,String> map = new HashMap<>();
        int month = cal.get(Calendar.MONTH);
        if(month<=9){
            submitMonth = "0"+month;
        }else{
            submitMonth = String.valueOf(month);
        }
        if(month==0){
            submitYear = String.valueOf(Integer.parseInt(submitYear)-1);
            submitMonth="12";
        }
        map.put("submitYear",submitYear);
        map.put("type","1");
        if(spicFirstDeptId!=null&&!spicFirstDeptId.equals(employee.getOrgCode())){//如果非当前部门查看报告，填写的数据必须审核通过后才能看到
            map.put("status","3");
        }
        map.put("submitMonth",submitMonth);
        map.put("deptid",spicFirstDeptId==null?employee.getOrgCode():spicFirstDeptId);
        ReportDTO reportDTO=reportService.getReportByCondition(map);
        reportDTO.setSubmitYear(submitYear);
        reportDTO.setSubmitMonth(submitMonth);
        reportDTO.setCompname(organizationService.getOrgNameByCode(employee.getOrgCode()));
//        System.out.println(reportDTO.getCompname());
        return reportDTO;
    }
    public static void main(String [] args) throws ParseException, IOException, InvalidFormatException {
        //Blank Document
        XWPFDocument document= new XWPFDocument();

        //Write the Document in file system
        FileOutputStream out = new FileOutputStream(new File("D:/file/a.docx"));
        //添加标题
        XWPFParagraph titleParagraph = document.createParagraph();
        //设置段落居中
        titleParagraph.setAlignment(ParagraphAlignment.CENTER);
        XWPFRun titleParagraphRun = titleParagraph.createRun();
        titleParagraphRun.setText("XX公司对标提升工作月度报告（2月）");
        titleParagraphRun.setColor("000000");
        titleParagraphRun.setFontSize(20);
        //段落
        XWPFParagraph firstParagraph = document.createParagraph();
        XWPFRun run = firstParagraph.createRun();
        run.setText("一、完成情况\r");
        run.setFontSize(16);
        //段落
        XWPFParagraph secParagraph = document.createParagraph();
        XWPFRun run2 = secParagraph.createRun();
        run2.setText("1.月度进度：（柱+折线组合图）");
        run2.setFontSize(10);

        StringBuffer sbf=new StringBuffer();
        sbf.append("");
        sbf.append("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");
        String chart1=sbf.toString();
        String base64Data =  chart1.split(",")[1];
        /**
         * 2.解码成字节数组
         */
        Base64.Decoder decoder = Base64.getDecoder();
        byte[] bytes = decoder.decode(base64Data);
        //换行
        XWPFParagraph paragraph1 = document.createParagraph();
        XWPFRun paragraphRun1 = paragraph1.createRun();
        paragraphRun1.addPicture(new ByteArrayInputStream(bytes), Document.PICTURE_TYPE_PNG, "123.png", Units.toEMU(500), Units.toEMU(200));

        //段落
        XWPFParagraph thirParagraph = document.createParagraph();
        XWPFRun run3 = thirParagraph.createRun();
        run3.setText("2.累计进度：（柱+折线组合图）");
        run3.setFontSize(10);
        //换行
        XWPFParagraph paragraph2 = document.createParagraph();
        XWPFRun paragraphRun2 = paragraph2.createRun();
        paragraphRun2.addPicture(new ByteArrayInputStream(bytes), Document.PICTURE_TYPE_PNG, "123.png", Units.toEMU(500), Units.toEMU(200));
        //段落
        XWPFParagraph fourParagraph = document.createParagraph();
        XWPFRun run4 = fourParagraph.createRun();
        run4.setText("二、逾期项目");
        run4.setFontSize(16);
        //段落
        XWPFParagraph fiveParagraph = document.createParagraph();
        XWPFRun run5 = fiveParagraph.createRun();
        run5.setText("1.数量统计：（柱图）");
        run5.setFontSize(10);
        //换行
        XWPFParagraph paragraph3 = document.createParagraph();
        XWPFRun paragraphRun3= paragraph3.createRun();
        paragraphRun3.addPicture(new ByteArrayInputStream(bytes), Document.PICTURE_TYPE_PNG, "123.png", Units.toEMU(500), Units.toEMU(200));
        //段落
        XWPFParagraph sixParagraph = document.createParagraph();
        XWPFRun run6 = sixParagraph.createRun();
        run6.setText("2.统计表");
        run6.setFontSize(10);
        //工作经历表格
        XWPFTable ComTable = document.createTable();
        //列宽自动分割
        CTTblWidth comTableWidth = ComTable.getCTTbl().addNewTblPr().addNewTblW();
        comTableWidth.setType(STTblWidth.DXA);
        comTableWidth.setW(BigInteger.valueOf(9072));
        //表格第一行
        XWPFTableRow comTableRowOne = ComTable.getRow(0);
        comTableRowOne.getCell(0).setText("对标领域");
        comTableRowOne.addNewTableCell().setText("本单位对标清单序号");
        comTableRowOne.addNewTableCell().setText("集团专项对标清单序号");
        comTableRowOne.addNewTableCell().setText("集团对标清单序号");
        comTableRowOne.addNewTableCell().setText("行动项&重点任务");
        comTableRowOne.addNewTableCell().setText("时间节点");
        comTableRowOne.addNewTableCell().setText("计划进度");
        comTableRowOne.addNewTableCell().setText("实际进度");
        comTableRowOne.addNewTableCell().setText("进展情况");
        comTableRowOne.addNewTableCell().setText("牵头单位");
        comTableRowOne.addNewTableCell().setText("配合单位");
        //表格第二行
        for(int i=0;i<=10;i++){
            XWPFTableRow comTableRowTwo = ComTable.createRow();
            comTableRowTwo.getCell(0).setText("1");
            comTableRowTwo.getCell(1).setText("2");
            comTableRowTwo.getCell(2).setText("3");
            comTableRowTwo.getCell(3).setText("4");
            comTableRowTwo.getCell(3).setText(i+"");
        }
        //段落
        XWPFParagraph sevenParagraph = document.createParagraph();
        XWPFRun run7 = sevenParagraph.createRun();
        run7.setText("3.原因分析");
        run7.setFontSize(10);
        //段落
        XWPFParagraph eightParagraph = document.createParagraph();
        XWPFRun run8 = eightParagraph.createRun();
        run8.setText("原因分析原因分析原因分析原因分析原因分析原因分析原因分析原因分析原因分析原因分析原因分析原因分析");
        run8.setFontSize(10);
        //段落
        XWPFParagraph nineParagraph = document.createParagraph();
        XWPFRun run9 = nineParagraph.createRun();
        run9.setText("三、工作特点");
        run9.setFontSize(16);
        //段落
        XWPFParagraph tenParagraph = document.createParagraph();
        XWPFRun run10 = tenParagraph.createRun();
        run10.setText("1.整体进度：");
        run10.setFontSize(10);
        //段落
        XWPFParagraph elevenParagraph = document.createParagraph();
        XWPFRun run11 = elevenParagraph.createRun();
        run11.setText("    根据集团制定的管理提升工作评分规则， 中国电力国际发展有限公司管理提升工作综合得分 1.11分，位居集团第 15名。 中国电力国际发展有限公司对标提升行动分为 战略管理,财务管理,客户与市场营销管理,运营管理,科技管理,组织管理,人力资源管理,信息化管理,风险管理,等 9大专项，共计 103条细化行动项。截止五月底， 中国电力国际发展有限公司103条进度正常， 0条进度逾期，逾期的细化行动项涉及 。");
        run11.setFontSize(10);

        //段落
        XWPFParagraph twevleParagraph = document.createParagraph();
        XWPFRun run12 = twevleParagraph.createRun();
        run12.setText("    2.做法和经验");
        run12.setFontSize(10);
        //段落
        XWPFParagraph thirteenParagraph = document.createParagraph();
        XWPFRun run13 = thirteenParagraph.createRun();
        run13.setText("          1、中国电力召开对标提升行动专项推进会，对牵头部门的工作任务进展情况进行了通报，要求各牵头部门高度重视对标提升专项工作，并将进展情况在月度司务会上通报。\n" +
                "2、及时与集团战略部对接，了解工作评分规则，同时升版对标提升工作清单，针对修改之处要“点对点”发牵头部门，对于推进过程中可能存在的重点难点问题提前预判，确保有序推进。");
        run13.setFontSize(10);
        //段落
        XWPFParagraph fourteenParagraph = document.createParagraph();
        XWPFRun run14 = fourteenParagraph.createRun();
        run14.setText("四、进一步改进措施");
        run14.setFontSize(16);
        //段落
        XWPFParagraph fifteenParagraph = document.createParagraph();
        XWPFRun run15 = fifteenParagraph.createRun();
        run15.setText("     1、对重点工作任务项以及即将截止的任务项进行“点对点”督办，争取不出现逾期项。\n" +
                "2、各部门在对标提升工作过程中要及时总结专业管理能力、对标提升效果、可操作性、前瞻性和代表性等方面的突出优势，形成示范案例。");
        run15.setFontSize(10);
        document.write(out);
        out.close();
        System.out.println("create_table document written success.");
    }
    /**

     * 获取两个日期相差的月数

     * @param d1 较大的日期

     * @param d2 较小的日期

     * @return 如果d1>d2返回 月数差 否则返回0

     */

    public static int getMonthDiff(Date d1, Date d2) {
        Calendar c1 = Calendar.getInstance();

        Calendar c2 = Calendar.getInstance();

        c1.setTime(d1);

        c2.setTime(d2);

        if(c1.getTimeInMillis() < c2.getTimeInMillis()) return 0;

        int year1 = c1.get(Calendar.YEAR);

        int year2 = c2.get(Calendar.YEAR);

        int month1 = c1.get(Calendar.MONTH);

        int month2 = c2.get(Calendar.MONTH);

        int day1 = c1.get(Calendar.DAY_OF_MONTH);

        int day2 = c2.get(Calendar.DAY_OF_MONTH);

// 获取年的差值 假设 d1 = 2015-8-16 d2 = 2011-9-30

        int yearInterval = year1 - year2;

// 如果 d1的 月-日 小于 d2的 月-日 那么 yearInterval-- 这样就得到了相差的年数

        if(month1 < month2 || month1 == month2 && day1 < day2) yearInterval --;

// 获取月数差值

        int monthInterval = (month1 + 12) - month2 ;

        if(day1 < day2) monthInterval --;

        monthInterval %= 12;

        return yearInterval * 12 + monthInterval;

    }
    @GetMapping(value = "/employee")
    public EmployeeDTO employee(HttpServletRequest request, HttpServletResponse resp) throws IOException, InvalidFormatException, ParseException {
        String code=request.getParameter("code");
        EmployeeDTO employeeDTO=employeeService.getEmployeeById(code);
        return  employeeDTO;
    }
    @GetMapping(value = "/updEmployee")
    public String updEmployee(HttpServletRequest request, HttpServletResponse resp) throws IOException, InvalidFormatException, ParseException {
        String code=request.getParameter("code");
        String professional=request.getParameter("professional");
        EmployeeDTO employeeDTO=new EmployeeDTO();
        employeeDTO.setCode(code);
        employeeDTO.setProfessional(professional);
        employeeService.updEmpByCode(employeeDTO);
        return  "保存成功";
    }
    @PostMapping(value = "/exportExcelByBussines")
    public void exportExcelByBussines(HttpServletRequest request, HttpServletResponse resp) throws IOException, InvalidFormatException, ParseException {
        String chart1=request.getParameter("chart1");
        String chart2=request.getParameter("chart2");
        String chart3=request.getParameter("chart3");
        String gztd=request.getParameter("gztd");
        String spicFirstDeptId=request.getParameter("spicFirstDeptId");
        String yyfx=request.getParameter("yyfx");
        String zfAndjy=request.getParameter("zfAndjy");
        String jybgjcs=request.getParameter("jybgjcs");
        String compname=organizationService.getOrgNameByCode(spicFirstDeptId);
        //Blank Document
        XWPFDocument document= new XWPFDocument();

        //Write the Document in file system
        FileOutputStream out = new FileOutputStream(new File("D:/file/a.docx"));
        //添加标题
        XWPFParagraph titleParagraph = document.createParagraph();
        //设置段落居中
        titleParagraph.setAlignment(ParagraphAlignment.CENTER);
        XWPFRun titleParagraphRun = titleParagraph.createRun();
        titleParagraphRun.setText(compname+"对标提升工作月度报告（"+request.getParameter("month")+")");
        titleParagraphRun.setColor("000000");
        titleParagraphRun.setFontSize(20);
        //段落
        XWPFParagraph firstParagraph = document.createParagraph();
        XWPFRun run = firstParagraph.createRun();
        run.setText("一、完成情况\r");
        run.setFontSize(16);
        //段落
        XWPFParagraph secParagraph = document.createParagraph();
        XWPFRun run2 = secParagraph.createRun();
        run2.setText("1.月度进度：（柱+折线组合图）");
        run2.setFontSize(10);
        //第一张图片
        String base64Data =  chart1.split(",")[1];
        /**
         * 2.解码成字节数组
         */
        Base64.Decoder decoder = Base64.getDecoder();
        byte[] bytes = decoder.decode(base64Data);
        //换行
        XWPFParagraph paragraph1 = document.createParagraph();
        XWPFRun paragraphRun1 = paragraph1.createRun();
        paragraphRun1.addPicture(new ByteArrayInputStream(bytes), Document.PICTURE_TYPE_PNG, "123.png", Units.toEMU(500), Units.toEMU(200));

        //段落
        XWPFParagraph thirParagraph = document.createParagraph();
        XWPFRun run3 = thirParagraph.createRun();
        run3.setText("2.累计进度：（柱+折线组合图）");
        run3.setFontSize(10);
        //换行
        //第二张图片
         base64Data =  chart2.split(",")[1];
        /**
         * 2.解码成字节数组
         */
        decoder = Base64.getDecoder();
        bytes = decoder.decode(base64Data);
        XWPFParagraph paragraph2 = document.createParagraph();
        XWPFRun paragraphRun2 = paragraph2.createRun();
        paragraphRun2.addPicture(new ByteArrayInputStream(bytes), Document.PICTURE_TYPE_PNG, "123.png", Units.toEMU(500), Units.toEMU(200));
        //段落
        XWPFParagraph fourParagraph = document.createParagraph();
        XWPFRun run4 = fourParagraph.createRun();
        run4.setText("二、逾期项目");
        run4.setFontSize(16);
        //段落
        XWPFParagraph fiveParagraph = document.createParagraph();
        XWPFRun run5 = fiveParagraph.createRun();
        run5.setText("1.数量统计：（柱图）");
        run5.setFontSize(10);
        //换行
        //第二张图片
        base64Data =  chart3.split(",")[1];
        /**
         * 2.解码成字节数组
         */
        decoder = Base64.getDecoder();
        bytes = decoder.decode(base64Data);
        XWPFParagraph paragraph3 = document.createParagraph();
        XWPFRun paragraphRun3= paragraph3.createRun();
        paragraphRun3.addPicture(new ByteArrayInputStream(bytes), Document.PICTURE_TYPE_PNG, "123.png", Units.toEMU(500), Units.toEMU(200));
        //段落
        XWPFParagraph sixParagraph = document.createParagraph();
        XWPFRun run6 = sixParagraph.createRun();
        run6.setText("2.统计表");
        run6.setFontSize(10);
        //工作经历表格
        XWPFTable ComTable = document.createTable();
        //列宽自动分割
        CTTblWidth comTableWidth = ComTable.getCTTbl().addNewTblPr().addNewTblW();
        comTableWidth.setType(STTblWidth.DXA);
        comTableWidth.setW(BigInteger.valueOf(9072));
        //表格第一行
        XWPFTableRow comTableRowOne = ComTable.getRow(0);
        comTableRowOne.getCell(0).setText("对标领域");
        comTableRowOne.addNewTableCell().setText("本单位对标清单序号");
        comTableRowOne.addNewTableCell().setText("集团专项对标清单序号");
        comTableRowOne.addNewTableCell().setText("集团对标清单序号");
        comTableRowOne.addNewTableCell().setText("行动项&重点任务");
        comTableRowOne.addNewTableCell().setText("时间节点");
        comTableRowOne.addNewTableCell().setText("计划进度");
        comTableRowOne.addNewTableCell().setText("实际进度");
        comTableRowOne.addNewTableCell().setText("进展情况");
        comTableRowOne.addNewTableCell().setText("牵头单位");
        comTableRowOne.addNewTableCell().setText("配合单位");

        Calendar cal = Calendar.getInstance();
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        String submitMonth = null;
        String submitYear = String.valueOf(cal.get(Calendar.YEAR));
        EmployeeDTO employee = employeeService.getEmployeeById(getUserCode());
        Map<String,String> map = new HashMap<>();
        int month = cal.get(Calendar.MONTH);
        if(month<=9){
            submitMonth = "0"+month;
        }else{
            submitMonth = String.valueOf(month);
        }
        if(month==0){
            submitYear = String.valueOf(Integer.parseInt(submitYear)-1);
            submitMonth="12";
        }
        map.put("submitYear",submitYear);
        map.put("submitMonth",submitMonth);
        map.put("spicFirstDeptId",spicFirstDeptId==null?employee.getOrgCode():spicFirstDeptId);
        map.put("endtime",subMonth(new SimpleDateFormat("yyyy-MM-dd").format(new Date())));
        List<EchartDTO> echartDTOS = progressReportService.yuqiJdx_xiangxi(map);//全部项目数据
        DecimalFormat df=new DecimalFormat("0.00");
        //表格第二行
        for(EchartDTO echartDTO:echartDTOS){
            XWPFTableRow comTableRowTwo = ComTable.createRow();
            comTableRowTwo.getCell(0).setText(echartDTO.getDbly());
            comTableRowTwo.getCell(1).setText(echartDTO.getJtzxdbqdh());
            comTableRowTwo.getCell(2).setText(echartDTO.getBdwbdqdxh());
            comTableRowTwo.getCell(3).setText(echartDTO.getJtdbqdxh());
            comTableRowTwo.getCell(4).setText(echartDTO.getXdx());
            comTableRowTwo.getCell(5).setText(echartDTO.getEndtime());
            comTableRowTwo.getCell(6).setText(df.format(Double.parseDouble(echartDTO.getJhwc())*100)+"%");
            comTableRowTwo.getCell(7).setText(df.format(Double.parseDouble(echartDTO.getSjwc())*100)+"%");
            comTableRowTwo.getCell(8).setText(echartDTO.getJzqk());
            comTableRowTwo.getCell(9).setText(echartDTO.getPhdw());
            comTableRowTwo.getCell(10).setText(echartDTO.getQtdw());
        }
        //段落
        XWPFParagraph sevenParagraph = document.createParagraph();
        XWPFRun run7 = sevenParagraph.createRun();
        run7.setText("3.原因分析");
        run7.setFontSize(10);
        //段落
        XWPFParagraph eightParagraph = document.createParagraph();
        XWPFRun run8 = eightParagraph.createRun();
        run8.setText("    "+yyfx);
        run8.setFontSize(10);
        //段落
        XWPFParagraph nineParagraph = document.createParagraph();
        XWPFRun run9 = nineParagraph.createRun();
        run9.setText("三、工作特点");
        run9.setFontSize(16);
        //段落
        XWPFParagraph tenParagraph = document.createParagraph();
        XWPFRun run10 = tenParagraph.createRun();
        run10.setText("1.整体进度：");
        run10.setFontSize(10);
        //段落
        XWPFParagraph elevenParagraph = document.createParagraph();
        XWPFRun run11 = elevenParagraph.createRun();
        run11.setText("    "+gztd);
        run11.setFontSize(10);

        //段落
        XWPFParagraph twevleParagraph = document.createParagraph();
        XWPFRun run12 = twevleParagraph.createRun();
        run12.setText("    2.做法和经验");
        run12.setFontSize(10);
        //段落
        XWPFParagraph thirteenParagraph = document.createParagraph();
        XWPFRun run13 = thirteenParagraph.createRun();
        run13.setText("     "+zfAndjy);
        run13.setFontSize(10);
        //段落
        XWPFParagraph fourteenParagraph = document.createParagraph();
        XWPFRun run14 = fourteenParagraph.createRun();
        run14.setText("四、进一步改进措施");
        run14.setFontSize(16);
        //段落
        XWPFParagraph fifteenParagraph = document.createParagraph();
        XWPFRun run15 = fifteenParagraph.createRun();
        run15.setText("     "+jybgjcs);
        run15.setFontSize(10);
        String filename=compname+submitYear+submitMonth+".docx";
        String fileNameURL = URLEncoder.encode(filename, "UTF-8");
        resp.setCharacterEncoding("UTF-8");
        resp.setHeader("Content-disposition", "attachment;filename=" + fileNameURL + ";" + "filename*=utf-8''" + fileNameURL);
        resp.setContentType("application/octet-stream");
        //刷新缓冲
        resp.flushBuffer();
        OutputStream ouputStream = resp.getOutputStream();
        //workbook将Excel写入到response的输出流中，供页面下载该Excel文件
        document.write(ouputStream);
        ouputStream.flush();
        ouputStream.close();
        System.out.println("22222222222222222222222222222");


//        document.write(out);
//        out.close();
    }
}

